const Koa = require('koa')
const bodyParser = require('koa-bodyparser')
const staticFiles = require('koa-static');
const path = require('path')
const {generateToken,getDecryptToken} = require('./config')
 require('./soket/soket')
//解决koa框架中跨域需要安装对应的cors包
const cors = require('@koa/cors');
//mongoose
const mongoose =require('mongoose')


//路由接口
const {loginRouter,findUser}=require('./router/login')


const app = new Koa()
app.use(bodyParser())
app.use(cors())

//开放静态资源目录
app.use(staticFiles(path.join(__dirname , 'resource_upload')));



// 第一个中间件，用来做登录鉴权。判断用户是否登录
app.use(async (ctx,next)=>{
    const {request,response} =ctx
    const url =request.url


  
    try{
      {


        if(request.url!='/bxg/login'){
            //判断token是否存在

            if(!request.headers.authorization_token){
                ctx.body={
                    code:400,
                    data:{
                        msg:'未登录'
                    }
                }
            }else{
                //token存在，判断token是否正确.解析token得到account和password的Json格式。校验数据库是否存在该用户

               var {account,password} =(getDecryptToken(request.headers.authorization_token))

               const res= await findUser({account})

                if(res.length>0){ //数据库存在该用户则放行

                    await next()
                }else{//不存在则返回错误信息
                   ctx.body={
                     code:400,
                     data:{
                        msg:'token无效'
                     }
                   }
                }

            }
        }else{
            await next()
        }
    }
    }catch(err){
        console.log(err)
        ctx.body={
            code:401,
            data:{
                msg:'服务器错误'
            }
        }
    }
  
})



//登录接口
app.use(loginRouter.routes(),loginRouter.allowedMethods())




//链接mongodb数据库
mongoose.connect('mongodb://127.0.0.1:27017/koa', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})

app.listen(3535,()=>{
    console.log('service runing 3535 port！')
})

